package com.mjlf.mjatis.result;

import com.mjlf.mjatis.config.Configuration;
import com.mjlf.mjatis.mapper.MapperMethod;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collections;
import java.util.Map;

/**
 * @ClassName ResutUtil
 * @Author mjlft
 * @Date 2020/7/18 17:07
 * @Version 1.0
 * @Description 结果映射处理累
 */
public class ResutUtil {

    /**
     * 结果映射处理方法
     * @param configuration
     * @param tClass
     * @param resultSet
     * @param <T>
     * @return
     */
    public static  <T> T parseResult(Configuration configuration, Class<T> tClass, ResultSet resultSet) throws IllegalAccessException, InstantiationException, SQLException, InvocationTargetException {
        if(resultSet != null){
            //首先判断是什么类型的结果，如果是集合，处理方法不同

            //判断是不是集合
            if(tClass.isAssignableFrom(Collections.class)){

            }
            //判断是不是Map
            if(tClass.isAssignableFrom(Map.class)){

            }
            //创建实例
            T result = tClass.newInstance();

            //实例映射
            Method[] methods = result.getClass().getDeclaredMethods();
            for(Method method: methods){
                String methodName = method.getName();
                //通过实例set方法进行结果映射
                if(methodName.startsWith("set")){
                    String name = methodName.replace("set", "");
                    String insName = name.substring(0, 1).toLowerCase() + name.substring(1);
                    method.invoke(result, resultSet.getObject(insName));
                }
            }
            return result;
        }
        return null;
    }
}
